
package nativesql.basic;

import java.util.List;

import org.hibernate.SQLQuery;

import com.e885.hibernate.HibernateSessionFactory;
import com.e885.log.E885Logger;

/**
 * 使用 Native SQL 的方式做查詢, 其傳回值均為 Object, 要如何知道 cast 何種型別呢，請參考這個範例的做法！<br>
 * 請參考 Table DISTRICT：<br>
 * 1. 欄位 ID 宣告型別為 CHAR(3), 所以要轉為 Character。<br>
 * 2. 欄位 COUNTY_ID 宣告型別為 CHAR(1), 所以要轉為 Character。<br>
 * 3. 欄位 Name 宣告為 VARCHAR2(9), 所以要轉為 String 型別。
 * 
 * @author Eric.Kao(gau168.gau@msa.hinet.net)
 * @version 1.0
 * @company E885 Group
 * @copyright Copyright (c) 2001-2008
 */

public class SampleNativeSQL
{
	/**
	 * 深坑鄉的郵遞區號
	 */
	private String countyId = "F";

	public static void main( String[] args )
	{
		new SampleNativeSQL();
	}

	@SuppressWarnings( "unchecked" )
	public SampleNativeSQL()
	{
		String sql = "select ID,Name,COUNTY_ID from DISTRICT where COUNTY_ID=:countyId";

		SQLQuery query = HibernateSessionFactory.getSession().createSQLQuery( sql );

		query.setParameter( "countyId", countyId );

		List< Object[] > list = query.list();

		for( int i = 0; i < list.size(); i++ )
		{
			Object[] objs = list.get( i );

			E885Logger.testLog.debug( "=======================================================" );
			E885Logger.testLog.debug( "id:" + ( Character )objs[ 0 ] );
			E885Logger.testLog.debug( "name:" + ( String )objs[ 1 ] );
			E885Logger.testLog.debug( "county id:" + ( Character )objs[ 2 ] );
		}
	}

}
